جزوه · فصل دوم · جلسه ۲۹ · پردازش‌ها در لینوکس ← بازگشت به فهرست
📘 فصل دوم · جلسه ۲۹ پردازش‌ها در لینوکس
📅 تاریخ: چهارشنبه، ۲۱ مرداد ۱۴۰۵ 👤 مدرس: محمد عابدینی 🐚 Zsh · 🐧 Debian (کالی) · 📦 Red Hat

▍ مقدمه

در لینوکس، هر برنامه، فرمان، ابزار یا سرویسی که اجرا شود، یک پردازش (Process) محسوب می‌شود. هسته لینوکس (Kernel) برای مدیریت این پردازش‌ها، به هر کدام یک عدد منحصربه‌فرد به نام PID (Process ID) اختصاص می‌دهد.

🔑 اولین پردازش در لینوکس:

اولین پردازشی که پس از بوت شدن سیستم‌عامل اجرا می‌شود، به طور سنتی init است که با PID شماره ۱ شناخته می‌شود. در سیستم‌های جدیدتر، این نقش توسط systemd (با PID ۱) یا سایر init سیستم‌ها انجام می‌شود.

▍ ابزارهای مشاهده پردازش‌ها

دو ابزار اصلی برای مشاهده پردازش‌ها در لینوکس وجود دارند:

📸 ps (Process Snapshot)

  • یک عکس لحظه‌ای (Snapshot) از پردازش‌ها در زمان اجرا ارائه می‌دهد.
  • خروجی ایستا (Static) است و تغییرات بعدی را نشان نمی‌دهد.
  • مناسب برای مشاهده وضعیت دقیق پردازش‌ها در یک لحظه خاص.
  • برای تحلیل و اسکریپت‌نویسی بسیار مفید است.

🔄 top (Real-time Process Viewer)

  • پردازش‌ها را به‌صورت لحظه‌ای (Real-time) و پویا نمایش می‌دهد.
  • خروجی پویا (Dynamic) است و به‌طور مداوم به‌روز می‌شود.
  • مناسب برای مانیتورینگ لحظه‌ای و مشاهده تغییرات منابع.
  • امکان مرتب‌سازی بر اساس مصرف CPU، RAM و ... را دارد.

▍ دستور ps و گزینه‌های آن

دستور ps یکی از پرکاربردترین ابزارهای مدیریت فرآیند است. با استفاده از گزینه‌های مختلف، می‌توانید اطلاعات متنوعی از پردازش‌ها دریافت کنید.

• ساختار کلی

ps [options]

• گزینه‌های رایج ps

گزینه توضیح
ps نمایش پردازش‌های جاری در همان ترمینال (ساده)
ps -e نمایش همه پردازش‌ها (Every process)
ps -f نمایش با قالب کامل (Full format) شامل کاربر، زمان شروع، و ...
ps -u [user] نمایش پردازش‌های یک کاربر خاص
ps -p [PID] نمایش اطلاعات یک پردازش با شماره PID مشخص
ps aux نمایش همه پردازش‌ها با جزئیات کامل (BSd style)
ps -ef نمایش همه پردازش‌ها با فرمت کامل (System V style)
ps -aux مشابه ps aux (گاهی کاربری با نام 'x' را هم نمایش می‌دهد)
ps -eo pid,ppid,cmd,%cpu,%mem نمایش فیلدهای دلخواه (custom output)

▍ دستور ps -aux (مهم و پرکاربرد)

دستور ps -aux یکی از رایج‌ترین دستورات برای مشاهده همه پردازش‌ها همراه با جزئیات کامل است. در ادامه، تک‌تک سوییچ‌های این دستور را بررسی می‌کنیم.

┌──(ya3in㉿kali)-[~] └─$ ps -aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 167324 11284 ? Ss 10:00 0:02 /sbin/init
root 2 0.0 0.0 0 0 ? S 10:00 0:00 [kthreadd]
root 10 0.0 0.0 0 0 ? I< 10:00 0:00 [rcu_gp]
user 1000 0.5 2.3 345678 23456 tty1 Ssl 10:00 1:32 /usr/bin/gnome-shell
user 1200 0.1 0.5 123456 12345 ? S 10:05 0:15 /usr/bin/firefox
...

• توضیح سوییچ‌های ps -aux

این دستور از ترکیب سه گزینه اصلی تشکیل شده است:

💡 نکته مهم:

تفاوت ps aux و ps -aux: در بیشتر سیستم‌ها، این دو دستور خروجی یکسانی دارند. با این حال، در برخی توزیع‌ها، ps -aux ممکن است کاربری با نام 'x' را نیز جستجو کند (که معمولاً وجود ندارد) و سپس نتیجه مشابه ps aux را نمایش دهد. برای جلوگیری از هر گونه سردرگمی، استفاده از ps aux توصیه می‌شود، اما در عمل هر دو کاربرد یکسانی دارند.

• ستون‌های خروجی ps aux

ستون توضیح
USER مالک پردازش (نام کاربری که پردازش را اجرا کرده)
PID شناسه منحصربه‌فرد پردازش (Process ID)
%CPU درصد استفاده از CPU توسط این پردازش
%MEM درصد استفاده از RAM توسط این پردازش
VSZ حافظه مجازی (Virtual Memory Size) به کیلوبایت
RSS حافظه واقعی (Resident Set Size) به کیلوبایت
TTY ترمینال متصل (اگر پردازش به ترمینال متصل باشد)
STAT وضعیت پردازش (مانند R=Running, S=Sleeping, Z=Zombie)
START زمان شروع پردازش
TIME زمان کل CPU استفاده‌شده توسط پردازش
COMMAND نام دستور یا برنامه‌ای که پردازش را اجرا کرده

▍ مزایا و معایب ps -aux

✅ مزایا

  • نمایش کامل: همه پردازش‌های سیستم (از جمله پردازش‌های سیستمی و کاربران دیگر) را نشان می‌دهد.
  • اطلاعات جامع: شامل جزئیات مفید مانند درصد CPU، درصد RAM، وضعیت و ... است.
  • قابلیت فیلتر: با ترکیب با دستورات دیگر (مانند grep) می‌توان پردازش‌های خاص را پیدا کرد.
  • سادگی: استفاده از آن آسان است و نیازی به تنظیمات پیچیده ندارد.
  • اسکریپت‌نویسی: خروجی آن برای استفاده در اسکریپت‌ها و تحلیل‌های خودکار بسیار مناسب است.

❌ معایب

  • عکس لحظه‌ای: فقط وضعیت پردازش‌ها را در لحظه اجرا نشان می‌دهد و پویا نیست.
  • حجم بالا: در سیستم‌های با پردازش‌های زیاد، خروجی بسیار طولانی می‌شود و خواندن آن دشوار است.
  • عدم نمایش تغییرات: تغییرات مصرف CPU و RAM را به‌صورت لحظه‌ای نشان نمی‌دهد (برخلاف top).
  • نیاز به گزینه‌های اضافی: برای دریافت اطلاعات خاص، نیاز به ترکیب با گزینه‌های دیگر یا دستورات جانبی دارد.

▍ مثال‌های عملی

• پیدا کردن پردازش‌های یک کاربر خاص

┌──(ya3in㉿kali)-[~] └─$ ps -u tecmint

نمایش همه پردازش‌های متعلق به کاربر tecmint.

• فیلتر کردن با grep

┌──(ya3in㉿kali)-[~] └─$ ps aux | grep firefox user 1200 0.1 0.5 123456 12345 ? S 10:05 0:15 /usr/bin/firefox

پیدا کردن پردازش‌های مربوط به firefox با استفاده از grep.

• نمایش ستون‌های دلخواه

┌──(ya3in㉿kali)-[~] └─$ ps -eo pid,comm,%cpu,%mem --sort=-%cpu | head -10 PID COMMAND %CPU %MEM
1200 firefox 12.5 2.3
1000 gnome-shell 5.2 4.1
...

نمایش ۱۰ پردازش با بیشترین مصرف CPU.

▍ مقایسه ps و top

ویژگی ps aux top
نوع خروجی ایستا (Snapshot) پویا (Real-time)
به‌روزرسانی یک‌بار (در زمان اجرا) مداوم (هر چند ثانیه)
مناسب برای تحلیل دقیق، اسکریپت‌نویسی مانیتورینگ لحظه‌ای
مرتب‌سازی با گزینه‌ها (مثل --sort) تعاملی (با کلیدها)
خروجی قابل پردازش ✅ بله (مناسب برای grep و ...) ❌ خیر (خروجی تعاملی)
✅ تمرین پیشنهادی:
  • با ps aux همه پردازش‌های سیستم را مشاهده کنید و ستون‌های آن را بررسی کنید.
  • با ps aux | grep bash پردازش‌های مربوط به bash را پیدا کنید.
  • با ps -eo pid,comm,%cpu --sort=-%cpu | head -10 ۱۰ پردازش با بیشترین مصرف CPU را ببینید.
  • با ps -u $(whoami) پردازش‌های خودتان را مشاهده کنید.
  • تفاوت خروجی ps aux و ps -ef را مقایسه کنید.